package indi.zhifa.engine.bailan6.common.enumMemo.entity;


import indi.zhifa.engine.bailan6.common.web.entity.exception.ServiceException;

import java.util.HashMap;
import java.util.Map;

public class EnumNodeVo extends EnumVoDecorator {

    private Map<Object, EnumItemVo> mapByCode;
    private Map<String, EnumItemVo> mapByName;
    private Map<String, EnumItemVo> mapByCName;

    public EnumNodeVo(EnumVo pEnumDto){
        super(pEnumDto);
        mapByName = new HashMap<>();
        mapByCName = new HashMap<>();
        mapByCode = new HashMap<>();
        init();
    }

    public void init(){
        EnumItemVo[] enumItemDtos = (EnumItemVo[])getItems();
        for(EnumItemVo enumItemDto : enumItemDtos){
            mapByCode.put(enumItemDto.getCode(),enumItemDto);
            mapByName.put(enumItemDto.getName(),enumItemDto);
            mapByCName.put(enumItemDto.getCname(),enumItemDto);
        }
    }

    public EnumItemVo getByCode(Integer pCode){
        EnumItemVo enumItemDto = mapByCode.get(pCode);
        if(null == enumItemDto){
            throw new ServiceException("没有找到Code为 "+pCode+" 的枚举项");
        }
        return enumItemDto;
    }
    public EnumItemVo getByName(String pName){
        EnumItemVo enumItemDto = mapByName.get(pName);
        if(null == enumItemDto){
            throw new ServiceException("没有找到名为 "+pName+" 的枚举项");
        }
        return enumItemDto;
    }

    public EnumItemVo getByCName(String pCName){
        EnumItemVo enumItemDto = mapByCName.get(pCName);
        if(null == enumItemDto){
            throw new ServiceException("没有找到名为 "+pCName+" 的枚举项");
        }
        return enumItemDto;
    }
}
